在做任何事情之前,我們要先建立一個鏈結串列的物件。
int main() {
SLL *sll = new SLL;
DLL *dll = new DLL;
}
我們有了鏈結串列的類別,但是他還沒被建立任何類別方法。接下來,我們就要來實作第一個類別方法。
這個類別方法遇到最大的難點在於我們會更改到 head
,萬一處理不當整條鏈結串列都會消失。
步驟大致如下:
_data
。next
設為原本的 head
head
設為新節點class SLL {
private:
SLLNode *head;
public:
SLL();
void pushFront(int);
};
void SLL::pushFront(int _data) {
SLLNode *newNode = new SLLNode(_data);
newNode -> next = this -> head;
this -> head = newNode;
}
要不要特別處理「鏈結串列為空」的情況?(head == NULL
)
不用!因為當我們把 this -> head
用 NULL
置換後,結果仍然是我們要的。
class DLL {
private:
DLLNode *head;
public:
DLL();
void pushFront(int);
};
void DLL::pushFront(int _data) {
DLLNode *newNode = new DLLNode(_data);
if (this -> head == NULL) {
this -> head = newNode;
this -> tail = newNode;
return ;
}
this -> head -> prev = newNode;
newNode -> next = this -> head;
this -> head = newNode;
}
為什麼要特別處理「鏈結串列為空」的情況?(head == tail == NULL
)
因為這不只牽扯到 head
,也關係到 tail
的指向。
如果延續上述的做法,head
雖然會指向新的頭部節點,但是 tail
會維持預設的 NULL
。
#include <iostream>
// Classes Definition
int main() {
SLL *sll = new SLL;
sll -> pushFront(5);
DLL *dll = new DLL;
dll -> pushFront(5);
}
目前來說,我們沒有辦法測試這個類別方法是否正確,因為我們需要一個類別方法用來印出鏈結串列的內容。
這個部分就是下一篇的目標!